1から始めるCakePHP × AWS SDK for PHP2 – 環境構築編
こんにちは。望月です。
PHPでアプリケーションを書いているときに、アプリケーション内からAWSを操作したいことがあります。
- S3へのファイルアップロード
- SQSへのキューイング
- SES経由でのメール送信
- EC2インスタンスの情報取得
AWSはRESTインターフェースを提供しており、HTTPリクエスト経由でAWSの様々なリソースを扱うことができます。ですが、アプリケーションで一からHTTPリクエストを書くのは非効率的です。
AWSが提供しているSDKを利用すると、こういった操作をするための記述を簡単に書けるようになります。
PHPには、[AWS SDK for PHP](SDK1) と [AWS SDK for PHP 2](SDK2)が存在します。
が、今から始めるならSDK2の方をお勧めします。
また、PHPには様々なWebアプリケーションフレームワークが存在します。Symfony, CakePHP, FuelPHP, Zend Frameworkなど、パッと思いつくだけで10個近くは出てきそうです。
その中で、私のお気に入りのCakePHPを使用して、AWS SDK for PHP 2を利用したAWS操作の簡単なサンプルアプリケーションを書いていきます。
CakePHP以外のフレームワークでも使えるよう、なるべく汎用的なコードを書いていこうと思います。
今日の記事では、環境を構築して、CakePHPのWelcomeページが表示されるところまで書いていきます。
CakePHPとは?
CakePHPは、オープンソースのPHP用Webアプリケーションフレームワークです。Ruby on Railsに影響を受けて開発され、bakeコマンドによるテンプレート自動生成などの機能を備えています。
更新も活発で、2013年1月に2.3.0が,8月末には2.4.0が登場しました。(2013/10/7現在での最新は2.4.1)
環境構築
前提環境
以下の環境で作成、検証しました。
- 環境: Amazon EC2
- Amazon Linux 2013.09 ami
- PHP5.4
- IAM Role設定済みインスタンス
PHP5.4を導入していますが、PHP5.2.8以降であればCakePHPを動かすことはできます。 また、一番最後のIAM Roleに関しては、こちらの記事を参考にしてください。権限は必要になったら付与していくので、何も設定しないでOKです。
パッケージインストール
EC2にログインし、まずは必要なパッケージをさくっと入れます。
$ sudo yum install -y php54 \ php54-pdo \ php54-mbstring \ httpd24 \ mysql55-server $ sudo service mysqld start $ sudo service httpd start
composerを利用したインストール
CakePHPとSDKをインストールするには、普通にtar.gzをダウンロードしてきて云々、という方法もありますが、今回はcomposerというツールを利用します。
Composer公式サイト(英語)
composerはRubyでいうBundlerにあたり、インストールするライブラリの依存管理とバージョン管理を引き受けてくれます。
composerの定義ファイルを、/var/www/html下にcomposer.jsonという形で、以下のように記述します。 *1
{ "name": "aws-cakesample", "repositories": [ { "type": "pear", "url": "http://pear.cakephp.org" } ], "require": { "pear-cakephp/cakephp": "2.4.1", "aws/aws-sdk-php": "2.*" }, "config": { "vendor-dir": "vendor/" } }
"require" に記述してあるのが、アプリケーションから利用するライブラリです。
次に、以下のコマンドを実行します。
# curl -sS https://getcomposer.org/installer | php # ls -al total 904 drwxr-xr-x 2 root root 4096 Oct 6 03:29 . drwxr-xr-x 7 root root 4096 Oct 6 03:22 .. -rw-r--r-- 1 root root 307 Oct 6 03:26 composer.json -rwxr-xr-x 1 root root 913318 Oct 6 03:29 composer.phar
composer.pharというファイルが作成されました。その後、以下のコマンドを実行します。
# php composer.phar install (出力省略) # ls -al total 920 drwxr-xr-x 3 root root 4096 Oct 6 03:32 . drwxr-xr-x 7 root root 4096 Oct 6 03:22 .. -rw-r--r-- 1 root root 308 Oct 6 03:31 composer.json -rw-r--r-- 1 root root 9273 Oct 6 03:32 composer.lock -rwxr-xr-x 1 root root 913318 Oct 6 03:29 composer.phar drwxr-xr-x 8 root root 4096 Oct 6 03:32 vendor # ls -al vendor/ total 36 drwxr-xr-x 8 root root 4096 Oct 6 03:32 . drwxr-xr-x 3 root root 4096 Oct 6 03:32 .. -rw-r--r-- 1 root root 183 Oct 6 03:32 autoload.php drwxr-xr-x 3 root root 4096 Oct 6 03:32 aws drwxr-xr-x 2 root root 4096 Oct 6 03:32 bin drwxr-xr-x 2 root root 4096 Oct 6 03:32 composer drwxr-xr-x 3 root root 4096 Oct 6 03:32 guzzle drwxr-xr-x 3 root root 4096 Oct 6 03:32 pear-pear.cakephp.org drwxr-xr-x 3 root root 4096 Oct 6 03:32 symfony
依存関係含め、必要なパッケージ群がインストールされました。また.lockファイルも作成されています。
ミドルウェア設定
CakePHPを動作させるために、ミドルウェア群にいくつか設定が必要です。
httpd
CakePHPでは、.htaccessを利用したURLリライトを使うため、.htaccessの利用を許可する必要があります。
httpd.confのAllowOverrideの値を書き換えます。
$ diff -u /etc/httpd/conf/httpd.conf.orig /etc/httpd/conf/httpd.conf --- /etc/httpd/conf/httpd.conf.orig 2013-10-05 10:14:41.094487436 +0000 +++ /etc/httpd/conf/httpd.conf 2013-10-05 10:15:10.841296014 +0000 @@ -148,7 +148,7 @@ # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # - AllowOverride None + AllowOverride All # # Controls who can get stuff from this server. $ sudo service httpd restart
httpdの再起動をお忘れなく。
PHP
PHPの設定内容は適宜変える必要がありますが、必ず変えて置かなければならない箇所が一箇所あります。
それがタイムゾーンの設定です。パッケージでインストールすると、デフォルトでは無指定(コメントアウトされている)ので、明示的に値を設定してあげましょう。
$ diff -u /etc/php.ini.orig /etc/php.ini --- /etc/php.ini.orig 2013-10-05 09:56:28.151362646 +0000 +++ /etc/php.ini 2013-10-05 09:56:39.591377941 +0000 @@ -875,7 +875,7 @@ [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone -;date.timezone = +date.timezone = Asia/Tokyo ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667 $ sudo service httpd restart
PHPの設定変更後も、httpdの再起動が必要になります。
アプリケーションの雛形作成
長かったですが、ようやくアプリケーション作成に移ります。
雛形の作成には、CakePHPの付属コマンドである[bake]を利用します。
$ cd /var/www/html $ sudo mkdir aws-cakesample $ sudo vendor/bin/cake bake project aws-cakesample/ Welcome to CakePHP v2.4.1 Console --------------------------------------------------------------- App : html Path: /var/www/html/ --------------------------------------------------------------- Skel Directory: /var/www/html/vendor/pear-pear.cakephp.org/CakePHP/Cake/Console/Templates/skel Will be copied to: /var/www/html/aws-cakesample/ --------------------------------------------------------------- Look okay? (y/n/q) [y] > y --------------------------------------------------------------- Created: aws-cakesample in /var/www/html/aws-cakesample/ --------------------------------------------------------------- * Random hash key created for 'Security.salt' * Random seed created for 'Security.cipherSeed' * Cache prefix set * app/Console/cake.php path set. CakePHP is not on your `include_path`, CAKE_CORE_INCLUDE_PATH will be hard coded. You can fix this by adding CakePHP to your `include_path`. * CAKE_CORE_INCLUDE_PATH set to /var/www/html/vendor/pear-pear.cakephp.org/CakePHP in webroot/index.php * CAKE_CORE_INCLUDE_PATH set to /var/www/html/vendor/pear-pear.cakephp.org/CakePHP in webroot/test.php * Remember to check these values after moving to production server Project baked successfully! $ sudo chown -R apache:apache aws-cakesample/ $ ls -al aws-cakesample/ 合計 64 drwxr-xr-x 14 apache apache 4096 10月 6 03:48 2013 . drwxr-xr-x 4 root root 4096 10月 6 03:46 2013 .. -rwxr-xr-x 1 apache apache 140 10月 6 03:32 2013 .htaccess drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Config drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Console drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Controller drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Lib drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Locale drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Model drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Plugin drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Test drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Vendor drwxr-xr-x 9 apache apache 4096 10月 6 03:48 2013 View -rwxr-xr-x 1 apache apache 205 10月 6 03:32 2013 index.php drwxrwxrwx 6 apache apache 4096 10月 6 03:48 2013 tmp drwxr-xr-x 6 apache apache 4096 10月 6 03:48 2013 webroot
aws-cakesample/以下が、アプリケーションの本体で、vendor以下に入っている部分はCakePHPのコア部分です。
ここまでくれば、ブラウザでアクセスするとCakePHPのデフォルトWelcomeページが表示されるはずです。
http://<IP or Hostname>/aws-cakesample にアクセスしてみましょう。
データベース設定がない、と警告が出ていますが、そこは次回修正します。
まとめ
今回は環境構築だけで終わってしまいました。SDKを期待されていた方は、次回以降にご期待ください。
また、冒頭でPHPのSDKには2種類あると書きましたが、そちらの比較等もいずれまとめていこうと思います。
脚注
- 今回は実験環境なので、簡易化のため/var/www/htmlに置いていますが、ここはDocumentRoot以下のためHTTPでアクセスできてしまいます。
本来は/usr/localや/opt以下などに作成しましょう。 ↩